﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.IO;
using System.Drawing;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_NewUser : System.Web.UI.Page
    {
        string validaSession = "";
       
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    CargarDocentes();
                    cargaddls();
                    btnGuardarDocente.Attributes.Add("onclick", "this.disabled=true,this.value='Procesando...';" + ClientScript.GetPostBackEventReference(btnGuardarDocente, null) + ";");
                    lblvalida.Text = "";
                    lblvalida.Visible = false;
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }
            else
            {
                lblvalida.Text = "";
                lblvalida.Visible = false;
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("UI_NewUser.aspx");
        }

        protected void btnGuardarDocente_Click(object sender, EventArgs e)
        {
            ListadoDocentes oDocentes = new ListadoDocentes();
            string mensajeCargapicprofile = "";
            string mensaje = "";
            string fileNameFoto = "";
            if (btnGuardarDocente.Text == "Guardar Usuario")
            {
                if (fuFotoPerfil.HasFile)
                {
                    List<string> lista = new List<string>();
                    string path = Server.MapPath("~/UploadedImagesTeachers/");
                    lista = SaveFile(fuFotoPerfil.PostedFile, path);
                    mensajeCargapicprofile = lista[0];
                    fileNameFoto = lista[1];

                    if (mensajeCargapicprofile == "CARGA CORRECTA")
                    {
                        if (string.IsNullOrEmpty(txtApellidos.Text) || string.IsNullOrEmpty(txtDocumento.Text) || string.IsNullOrEmpty(txtNombres.Text) || string.IsNullOrEmpty(txtPassword.Text))
                        {
                            lblvalida.Text = "ERROR AL GUARDAR EL USUARIO";
                            ActivaError();
                        }
                        else
                        {
                            oDocentes.nombres = txtNombres.Text.ToUpper();
                            oDocentes.apellidos = txtApellidos.Text.ToUpper();
                            oDocentes.documento = txtDocumento.Text;
                            oDocentes.cadenaPicPerfil = fileNameFoto;
                            oDocentes.idGenero = int.Parse(ddlGenero.SelectedValue);
                            oDocentes.clave = txtPassword.Text;
                            mensaje = oDocentes.saveUsuarios();
                            lblvalida.Text = mensaje;
                            if (mensaje == "USUARIO GUARDADO CORRECTAMENTE")
                                {
                                    ActivaSuccess();
                                    CargarDocentes();
                                    LimpiarCampos();
                                }
                                else
                                {
                                    ActivaError();
                                }
                            
                        }
                    }
                    else
                    {
                        lblvalida.Text = "ERROR AL GUARDAR USUARIO";
                        ActivaError();
                    }
                }

                else
                {
                    lblvalida.Text = "NO HA CARGADO NINGÚN ARCHIVO";
                    ActivaError();
                }
            }
            else if (btnGuardarDocente.Text == "Editar Usuario")
            {
                try
                {
                    if (string.IsNullOrEmpty(txtApellidos.Text) || string.IsNullOrEmpty(txtDocumento.Text) || string.IsNullOrEmpty(txtNombres.Text))
                    {
                        lblvalida.Text = "ERROR AL EDITAR EL USUARIO";
                        ActivaError();
                    }
                    else
                    {
                        oDocentes.valorID = (int)Session["idDocenteespamidio"];
                        oDocentes.nombres = txtNombres.Text.ToUpper();
                        oDocentes.apellidos = txtApellidos.Text.ToUpper();
                        oDocentes.documento = txtDocumento.Text;
                        oDocentes.idGenero = int.Parse(ddlGenero.SelectedValue);
                        //oDocentes.idRol = int.Parse(ddlRol.SelectedValue);
                        mensaje = oDocentes.EditUsuarios();
                        if (mensaje == "USUARIO EDITADO CORRECTAMENTE")
                        {
                            lblvalida.Text = mensaje;
                            ActivaSuccess();
                            CargarDocentes();
                            LimpiarCampos();
                            Session.Remove("idDocenteespamidio");
                            NuevoDocente();
                        }
                        else
                        {
                            lblvalida.Text = mensaje;
                            ActivaError();
                        }
                    }
                }
                catch (Exception)
                {

                    Response.Redirect("UI_NewUser.aspx");
                    lblvalida.Text = "";
                    lblvalida.Visible = false;
                }
            }
        }

        public List<string> SaveFile(HttpPostedFile file, string path)
        {
            string respuesta = "";
            string name = "";
            string tempfileName = "";
            string pathToCheck = "";
            List<string> lista = new List<string>();
            try
            {
                string fileExt = Path.GetExtension(file.FileName);
                fileExt = fileExt.ToLower();
                if (fileExt == ".jpg" || fileExt == ".png" || fileExt == ".jpeg" ||fileExt==".JPG" ||fileExt==".JPEG")
                {
                    name = file.FileName;
                    pathToCheck = path + name;
                    //lblvalida.Text = "file name: " + fuFotoPerfil.PostedFile.FileName + "</br>" + "Content type: " + fuFotoPerfil.PostedFile.ContentType;
                    if (File.Exists(pathToCheck))
                    {
                        int counter = 2;
                        while (File.Exists(pathToCheck))
                        {
                            tempfileName = counter.ToString() + name;
                            pathToCheck = path + tempfileName;
                            counter++;
                        }
                        name = tempfileName;
                        respuesta = "CARGA CORRECTA";

                    }
                    else
                    {
                        respuesta = "CARGA CORRECTA";
                    }
                    path += name;
                    file.SaveAs(path);
                }
            }
            catch (Exception ex)
            {
                respuesta = ex.Message;
            }
            lista.Add(respuesta);
            lista.Add(name);
            return lista;
            //Codigo util para ya tu sabes jajaja
            //string respuesta = "";
            //string name = "";
            ////string tempfileName = "";
            ////string pathToCheck = "";
            //List<string> lista = new List<string>();
            //try
            //{
            //    string fileExt = Path.GetExtension(file.FileName);
            //    if (fileExt == ".jpg" || fileExt == ".png" || fileExt == ".jpeg")
            //    {
            //        //name = file.FileName;
            //        //name = txtDocumento.Text;
            //        //pathToCheck = path + name;
            //        //lblvalida.Text = "file name: " + fuFotoPerfil.PostedFile.FileName + "</br>" + "Content type: " + fuFotoPerfil.PostedFile.ContentType;
            //        //if (File.Exists(pathToCheck))
            //        //{
            //        //    int counter = 2;
            //        //    while (File.Exists(pathToCheck))
            //        //    {
            //        //        tempfileName = counter.ToString() + name;
            //        //        pathToCheck = path + tempfileName;
            //        //        counter++;
            //        //    }
            //        //    name = tempfileName;
            //        //    respuesta = "CARGA CORRECTA";
            //        //}
            //        //else
            //        //{
            //        //    respuesta = "CARGA CORRECTA";
            //        //}
            //        respuesta = "CARGA CORRECTA";
            //        name = name.Replace(file.FileName,"");
            //        name = Path.Combine(name,txtDocumento.Text+".jpg");
            //        path += name;
            //        file.SaveAs(path);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    respuesta = ex.Message;
            //}
            //lista.Add(respuesta);
            //lista.Add(name);
            //return lista;
            //fin codigo jaja
        }

        protected void ActivaError()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Red;
        }
        protected void ActivaSuccess()
        {
            lblvalida.Visible = true;
            lblvalida.ForeColor = Color.Green;
        }
        protected void LimpiarCampos()
        {
            txtNombres.Text = string.Empty;
            txtApellidos.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            cargaddls();

        }

        protected void NuevoDocente()
        {
            btnGuardarDocente.Text = "Guardar Usuario";
            btnCancelar.Visible = false;
            fuFotoPerfil.Enabled = true;
            fuFotoPerfil.Visible = true;
            esconde.Visible = true;
        }

        private void CargarDocentes()
        {
            ListadoDocentes listaDocentes = new ListadoDocentes();
            listaDocentes.estado = "Activo";
            gvUsuarios.DataSource = listaDocentes.getUsuarios();
            gvUsuarios.DataBind();
        }
        protected void cargaddls()
        {
            ListadoGeneros oListadoGeneros = new ListadoGeneros();
            List<Generos> lista = new List<Generos>();
            lista = oListadoGeneros.getGeneros();
            lista.Insert(0, new Generos() { idGenero = 0, genero = "<Eligir un Genero>" });
            ddlGenero.DataSource = lista;
            ddlGenero.DataTextField = "genero";
            ddlGenero.DataValueField = "idGenero";
            ddlGenero.DataBind();
            ListadoRoles oListadoRoles = new ListadoRoles();
            List<Roles> listaroles = new List<Roles>();
            listaroles = oListadoRoles.GetRoles();
            listaroles.Insert(0, new Roles() { idRol = 0, rol = "<Eligir un rol>" });
            //ddlRol.DataSource = listaroles;
            //ddlRol.DataTextField = "rol";
            //ddlRol.DataValueField = "idRol";
            //ddlRol.DataBind();
        }

        protected void gvUsuarios_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string mensaje = "";
            ListadoDocentes oListado = new ListadoDocentes();
           
            try
            {
                int index = e.RowIndex;
                int id = (int)gvUsuarios.DataKeys[index].Value;
                
            if ((int)Session["idPersonaEspamIdiomasVarSession005"]==id)
            {
                lblvalida.Text = "NO SE PUEDE ELIMINAR USTED MISMO!!";
                ActivaError();
            }
            else
            {
                   oListado.valorID = id;
                    oListado.idEstado = 2;
                    mensaje = oListado.DeleteDocente();
                
                if (mensaje == "DOCENTE ELIMINADO CORRECTAMENTE")
                {
                    lblvalida.Text = "USUARIO ELIMINADO CORRECTAMENETE";
                    ActivaSuccess();
                    CargarDocentes();
                    LimpiarCampos();
                    NuevoDocente();
                }
                else
                {
                    ActivaError();
                    CargarDocentes();
                    LimpiarCampos();
                    NuevoDocente();
                }
             }
               
            }
            catch (Exception)
            {
                Response.Redirect("UI_NewUser.aspx");
            }
        }

        protected void gvUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<Docentes> listadoDocente = new List<Docentes>();
            GridViewRow row = gvUsuarios.SelectedRow;
            int idDocenteespamidio = Convert.ToInt32(gvUsuarios.DataKeys[row.RowIndex].Value);
            ListadoDocentes oDocentes = new ListadoDocentes();
            oDocentes.valorID = idDocenteespamidio;
            listadoDocente = oDocentes.GetUsuarioById();
            if (listadoDocente.Count > 0)
            {
                txtNombres.Text = listadoDocente[0].nombres;
                txtApellidos.Text = listadoDocente[0].apellidos;
                txtDocumento.Text = listadoDocente[0].documento;
                ddlGenero.SelectedValue = listadoDocente[0].idGenero.ToString();
                //ddlRol.SelectedValue = listadoDocente[0].idRol.ToString();
                Session["idDocenteespamidio"] = idDocenteespamidio;
                lblvalida.Text = string.Empty;
                lblvalida.Visible = false;
                EditarDocente();
            }
            else
            {
                lblvalida.Text = "NO EXISTE EL DOCENTE";
                ActivaError();
            }
        }
        private void EditarDocente()
        {
            btnCancelar.Visible = true;
            btnGuardarDocente.Text = "Editar Usuario";
            fuFotoPerfil.Enabled = false;
            fuFotoPerfil.Visible = false;
            lblFotoPerfil.Visible = false;
            //filaHide.Visible = false;
            //filaHide1.Visible = false;
            esconde.Visible = false;
        }
    }
}